home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / mswlogo3.zip / MSWLOGO.ZIP / EXAMPLES.ZIP / FORMAT < prev    next >
Text File  |  1993-04-12  |  2KB  |  139 lines

  1. ;
  2. ; Function:
  3. ;
  4. ; This program takes an input file of text and formats it into paragraphs
  5. ; justified with margins etc. See INI.VARS to make adjustments.
  6. ;
  7. ; To run:
  8. ;
  9. ; Load "format
  10. ; Call FORMAT "inputfile "outputfile
  11. ;
  12. TO ADDWORD :WORD
  13. IF NOT EMPTYP :LINE [MAKE "LINECOUNT :LINECOUNT+1]
  14. MAKE "LINE LPUT :WORD :LINE
  15. MAKE "LINECOUNT :LINECOUNT+COUNT :WORD
  16. END
  17.  
  18. TO BREAK
  19. IF EMPTYP :LINE [STOP]
  20. MAKE "LINECOUNT :WIDTH
  21. PUTLINE
  22. NEWINDENT
  23. IF :FILLING [SKIP :PARSKIP]
  24. END
  25.  
  26. TO FORMAT :FROM :TO
  27. OPENREAD :FROM
  28. OPENWRITE :TO
  29. SETREAD :FROM
  30. SETWRITE :TO
  31. INIT.VARS
  32. LOOP
  33. SETREAD []
  34. SETWRITE[]
  35. CLOSE :FROM
  36. CLOSE :TO
  37. END
  38.  
  39. TO INIT.VARS
  40. MAKE "PAGEHEIGHT 66
  41. MAKE "TOPMAR 6
  42. MAKE "LINES 54
  43. MAKE "LEFTMAR 7
  44. MAKE "WIDTH 65
  45. MAKE "FILLTAB 5
  46. MAKE "NOFILLTAB 0
  47. MAKE "PARSKIP 1
  48. MAKE "SPACING 1
  49. MAKE "STARTED "FALSE
  50. MAKE "FILLING "TRUE
  51. MAKE "PRINTED 0
  52. MAKE "INLINE []
  53. END
  54.  
  55. TO LOOP
  56. IF PROCESS NEXTWORD [STOP]
  57. LOOP
  58. END
  59.  
  60. TO NEWINDENT
  61. NEWLINE
  62. MAKE "INDENT IFELSE :FILLING [:FILLTAB] [:NOFILLTAB]
  63. MAKE "LINECOUNT :INDENT
  64. END
  65.  
  66. TO NEWLINE
  67. MAKE "LINE []
  68. MAKE "INDENT 0
  69. MAKE "LINECOUNT 0
  70. END
  71.  
  72. TO NEXTWORD
  73. IF NOT EMPTYP :INLINE [OP POPWORD FIRST :INLINE]
  74. IF NOT :FILLING [BREAK]
  75. MAKE "INLINE RL
  76. IF WORDP :INLINE [BREAK OP []]
  77. IF EMPTYP :INLINE [BREAK OP NEXTWORD]
  78. IF EQUALP FIRST RUNPARSE :INLINE "|*| [RUN BF RUNPARSE :INLINE MAKE "INLINE []]
  79. OP NEXTWORD
  80. END
  81.  
  82. TO NOFILL
  83. BREAK
  84. MAKE "FILLING "FALSE
  85. NEWINDENT
  86. END
  87.  
  88. TO POPWORD :NEXTWORD
  89. MAKE "INLINE BF :INLINE
  90. OP :NEXTWORD
  91. END
  92.  
  93. TO PROCESS :WORD
  94. IF LISTP :WORD [OP "TRUE]
  95. IF NOT :STARTED [START]
  96. IF (:LINECOUNT+1+COUNT :WORD) > :WIDTH [PUTLINE]
  97. ADDWORD :WORD
  98. OP "FALSE
  99. END
  100.  
  101. TO PUTLINE
  102. REPEAT :LEFTMAR+:INDENT [TYPE "| |]
  103. PUTWORDS :LINE ((COUNT :LINE)-1) (:WIDTH-:LINECOUNT) 0
  104. NEWLINE
  105. SKIP :SPACING
  106. END
  107.  
  108. TO PUTWORDS :LINE :SPACES :FILLER :PERWORD
  109. IF EMPTYP :LINE [STOP]
  110. TYPE FIRST :LINE
  111. IF :SPACES > 0 [MAKE "PERWORD INT ((:FILLER+:SPACES-1)/:SPACES)]
  112. IF :FILLER > 0 [REPEAT :PERWORD [TYPE "| |]]
  113. TYPE "| |
  114. PUTWORDS BF :LINE (:SPACES-1) (:FILLER-:PERWORD) 0
  115. END
  116.  
  117. TO SKIP :HOWMANY
  118. BREAK
  119. REPEAT :HOWMANY [PRINT []]
  120. MAKE "PRINTED :PRINTED+:HOWMANY
  121. IF :PRINTED < :LINES [STOP]
  122. REPEAT :PAGEHEIGHT-:PRINTED [PRINT []]
  123. MAKE "PRINTED 0
  124. END
  125.  
  126. TO START
  127. MAKE "STARTED "TRUE
  128. REPEAT :TOPMAR [PRINT []]
  129. NEWINDENT
  130. END
  131.  
  132. TO YESFILL
  133. BREAK
  134. IF NOT :FILLING [SKIP :PARSKIP]
  135. MAKE "FILLING "TRUE
  136. NEWINDENT
  137. END
  138.  
  139.